package pers.chao.tool.thread.pool;

import java.util.concurrent.Callable;
import java.util.concurrent.Future;

/**
 * Description: 执行器操作定义
 *
 * @author W.Chao
 * @date 2020/12/13 22:15
 **/
public interface IExecutor {

	/**
	 * 提交无返回的任务
	 *
	 * @param name
	 * @param command
	 */
	void execute(String name, Runnable command);

	/**
	 * 提交无返回的任务，任务完成时返回给定的结果{T result}
	 *
	 * @param name
	 * @param task
	 * @param result
	 * @param <T>
	 * @return
	 */
	<T> Future<T> submit(String name, Runnable task, T result);

	/**
	 * 提交无返回任务，任务完成时返回null
	 *
	 * @param name
	 * @param task
	 * @return
	 */
	Future<?> submit(String name, Runnable task);

	/**
	 * 提交一个返回运行结果的任务
	 *
	 * @param name
	 * @param task
	 * @param <T>
	 * @return
	 */
	<T> Future<T> submit(String name, Callable<T> task);

	boolean remove(Runnable command);

	boolean isShutdown();

	/**
	 * 返回执行器前缀名
	 *
	 * @return
	 */
	String getPrefixName();
}
